package com.example.logging;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.*;

public class JulExample {
    // 获取Logger实例
    private static final Logger logger = Logger.getLogger(JulExample.class.getName());

    public static void main(String[] args) throws IOException {
        // 1. 配置日志级别
        logger.setLevel(Level.ALL);

        // 2. 创建控制台处理器
        ConsoleHandler consoleHandler = new ConsoleHandler();
        consoleHandler.setLevel(Level.ALL);

        // 3. 创建文件处理器
        FileHandler fileHandler = new FileHandler("jul.log");
        fileHandler.setLevel(Level.ALL);

        // 4. 设置日志格式
        SimpleFormatter formatter = new SimpleFormatter() {
            private static final String format = "[%1$tF %1$tT] [%2$s] %3$s: %4$s %n";

            @Override
            public synchronized String format(LogRecord lr) {
                return String.format(format,
                        new Date(lr.getMillis()),
                        lr.getLevel().getLocalizedName(),
                        lr.getLoggerName(),
                        lr.getMessage()
                );
            }
        };
        
        fileHandler.setFormatter(formatter);
        consoleHandler.setFormatter(formatter);

        // 5. 添加处理器
        logger.addHandler(consoleHandler);
        logger.addHandler(fileHandler);

        // 6. 关闭默认处理器
        logger.setUseParentHandlers(false);

        // 7. 记录不同级别的日志
        logger.severe("严重错误信息");
        logger.warning("警告信息");
        logger.info("一般信息");
        logger.config("配置信息");
        logger.fine("详细信息");
        logger.finer("更详细信息");
        logger.finest("最详细信息");

        // 8. 带异常的日志
        try {
            throw new RuntimeException("测试异常");
        } catch (Exception e) {
            logger.log(Level.SEVERE, "发生异常: " + e.getMessage(), e);
        }

        // 9. 参数化消息
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String currentTime = sdf.format(new Date());
        logger.log(Level.INFO, "用户 {0} 在 {1} 登录系统", 
            new Object[]{"张三", currentTime});

        // 10. 资源清理
        fileHandler.close();
    }
} 